package cn.com.nes.site.entity.iot;

import cn.com.nes.mybatis.agent.ope.entity.*;
import cn.hutool.core.util.ObjUtil;

import java.util.List;

public class NesProtocolDataSet implements Comparable<NesProtocolDataSet> {

    private RegisterDataItem registerDataItem;
    private IsProtocolQueryCommand queryCommand;
    private IsDeviceProtocolDataItemInfo dataItemInfo;
    private List<IsDataItemField> dataItemField;
    private IsProtocolControlCommand controlCommand;
    private List<IsEquipmentFunctionDetailInfo> controlCommandParams;

    private boolean fromDB = false;

    public NesProtocolDataSet(RegisterDataItem registerDataItem) {
        this.registerDataItem = registerDataItem;
    }

    public NesProtocolDataSet() {
    }

    public NesProtocolDataSet(IsDeviceProtocolDataItemInfo dataItemInfo) {
        this.dataItemInfo = dataItemInfo;
        this.registerDataItem = new RegisterDataItem();
        this.registerDataItem.setRegisterAddress(dataItemInfo.getRegisterAddress());
        this.registerDataItem.setRegisterType(dataItemInfo.getRegisterType());
        if (ObjUtil.isEmpty(dataItemInfo.getBitPlaceEnd())) {
            this.registerDataItem.setBitAddress(String.valueOf(dataItemInfo.getBitPlace()));
        }else{
            this.registerDataItem.setBitAddress(String.format("%s-%s", dataItemInfo.getBitPlace(), dataItemInfo.getBitPlaceEnd()));
        }
        this.registerDataItem.setDataType(dataItemInfo.getDataTypeEnum());
        this.fromDB = true;
    }

    public IsDeviceProtocolDataItemInfo getDataItemInfo() {
        return dataItemInfo;
    }

    public void setDataItemInfo(IsDeviceProtocolDataItemInfo dataItemInfo) {
        this.dataItemInfo = dataItemInfo;
    }

    public IsProtocolControlCommand getControlCommand() {
        return controlCommand;
    }

    public void setControlCommand(IsProtocolControlCommand controlCommand) {
        this.controlCommand = controlCommand;
    }

    public List<IsDataItemField> getDataItemField() {
        return dataItemField;
    }

    public void setDataItemField(List<IsDataItemField> dataItemField) {
        this.dataItemField = dataItemField;
    }

    public List<IsEquipmentFunctionDetailInfo> getControlCommandParams() {
        return controlCommandParams;
    }

    public void setControlCommandParams(List<IsEquipmentFunctionDetailInfo> controlCommandParams) {
        this.controlCommandParams = controlCommandParams;
    }

    @Override
    public int compareTo(NesProtocolDataSet o) {
        return this.dataItemInfo.getRegisterAddress().compareTo(o.getDataItemInfo().getRegisterAddress());
    }

    public IsProtocolQueryCommand getQueryCommand() {
        return queryCommand;
    }

    public void setQueryCommand(IsProtocolQueryCommand queryCommand) {
        this.queryCommand = queryCommand;
    }

    public RegisterDataItem getRegisterDataItem() {
        return registerDataItem;
    }

    public void setRegisterDataItem(RegisterDataItem registerDataItem) {
        this.registerDataItem = registerDataItem;
    }

    public boolean isFromDB() {
        return fromDB;
    }
}
